
public class MergeSort {
	
	static long stappenteller = 0;
	
	public static Comparable[] sort(Comparable[] list){
		Comparable[] l = null;
		l = sortt(list);
		System.out.println("Mergesort resolved in : " + stappenteller);
		return l;
	}
	
	public static Comparable[] sortt(Comparable[] list){
		long startTijd = System.nanoTime();
		
		if(list.length <= 1){
			stappenteller++;
			return list;
		}
		int helft = list.length / 2;
		Comparable[] listLinks = new Comparable[helft];
		for(int index = 0; index < helft; index++){
			listLinks[index] = list[index];
			stappenteller++;
		}
		Comparable[] listRechts = new Comparable[list.length - helft];
		for(int index=helft; index<list.length; index++){
			listRechts[index-helft] = list[index];
			stappenteller++;
		}
		sortt(listLinks);
		sortt(listRechts);
		int indexLinks = 0;
		int indexRechts = 0;
		for(int index = 0; index < list.length; index++){
			stappenteller++;
			if (indexLinks >= listLinks.length){
				list[index]= listRechts[indexRechts++];
				
			} else if (indexRechts >= listRechts.length){
				list[index]= listLinks[indexLinks++];
				
			} else if (list[indexLinks].compareTo(listRechts[indexRechts]) <= 0){
				list[index] = listLinks[indexLinks++];
				
			} else{
				list[index]=listRechts[indexRechts++];
				
			}
		}
		long looptijd = System.nanoTime()-startTijd;
		
		return list;

	}
}
